package com.ruoyi.finance.livestreaming.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.finance.livestreaming.entity.SzOrder;
import com.ruoyi.finance.livestreaming.vo.CounterChargeVO;
import com.ruoyi.finance.rules.entity.SzPromotionTree;
import com.ruoyi.finance.rules.entity.SzUser;
import com.ruoyi.pay.vo.PayVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 数字直播Service接口
 * 
 * @author wangmh
 * @date 2023-09-17
 */
public interface IFiDigitalLivestreamingService 
{

    /**
     * 查询数字直播列表
     *
     */
    public List<SzUser> selectFiDigitalLivestreamingList(SzUser szUser);

    /**
     * 购买数字人直播 没有邀请人
     * @param userId
     */
    AjaxResult buyProduct(String userId);

    /**
     * 购买数字人直播 没有邀请人 抵扣支付
     * @param userId
     */
    AjaxResult deductionBuyProduct(String userId, BigDecimal amount, BigDecimal deductionAmount);

    /**
     * 购买数字人直播 有邀请人
     * @param userId
     * @param parentId
     * @return
     */
    AjaxResult buyProductByInvite(String userId, String parentId);

    /**
     * 购买数字人直播 有邀请人  抵扣支付
     * @param userId
     * @param parentId
     * @return
     */
    AjaxResult deductionBuyProductByInvite(String userId, String parentId, BigDecimal amount, BigDecimal deductionAmount);

    /**
     * 数字直播对冲
     * @param fromUser
     * @param toUser
     * @return
     */
    AjaxResult mutualRecharge(String fromUser, String toUser);

    /**
     * 获取数字直播用户邀请人
     * @param userId
     * @return
     */
    List<SzPromotionTree> userInviteTree(Long userId);

    /**
     * 数字直播 购买记录查询
     * @param userId
     * @return
     */
    Map<String, Object> purchaseRecord(Long userId);

    /**
     * 用户余额细明
     * @param userId
     * @return
     */
    Map<String, Object> balanceDetailAdmin(Long userId);

    /**
     * 用户可提现余额细明
     * @param userId
     * @return
     */
    Map<String, Object> withdrawalBalance(Long userId);

    /**
     * 扫码支付 创建订单
     * @param userId
     * @param parentId
     * @return
     */
    AjaxResult createOrder(String userId, String parentId);

    /**
     * 创建订单
     * @return
     */
    SzOrder createOrderApp(PayVO entity);

    /**
     * 购买订单 扫码支付
     * @return
     */
    AjaxResult purchaseOrder(String userId, String paymentType, SzOrder order);

    /**
     * 轮询支付状态
     * @param orderId
     * @param request
     * @return
     */
    AjaxResult orderPolling(String orderId, HttpServletRequest request);

    /**
     * H5支付 创建订单
     * @param userId
     * @param parentId
     * @param request
     * @param response
     * @return
     */
    AjaxResult createOrderH5(String userId, String parentId, HttpServletRequest request, HttpServletResponse response);

    /**
     * 数字直播对冲提现余额
     * @param fromUser
     * @param toUser
     * @return
     */
    AjaxResult mutualRechargeBalance(String fromUser, String toUser, BigDecimal money, String paymentPassword);

    /**
     * H5 数据直播对冲
     * @param vo
     * @return
     */
    AjaxResult mutualRechargeFree(CounterChargeVO vo);

    /*
    数字直播-冻结/启用
     */
    AjaxResult frozenOrEnable(Long id, String type);

    /**
     * 充值，不购买产品
     * @param order
     */
    void topUp(SzOrder order);
}
